const express = require('express')
const router = express.Router()
// 对密码进行加密的包
const bcryptjs = require('bcryptjs')
// 导入数据库模块
const db = require('../db/index.js')
// 导入验证表单中间件
const expressJoi = require('@escook/express-joi')
// 导入验证规则
const {reg_login_schema} = require('../schema/user.js')
// 用来生成token字符串的包
const jwt = require('jsonwebtoken')
// 导入配置文件
const config = require('../config')



// 注册新用户
router.post('/reguser',expressJoi(reg_login_schema),(req,res)=>{ 
    // 获取客户端提交到服务器的用户
    const userInfo = req.body

    //判断数据是否合法(已使用第三方库进行校验了)
    // if(!userInfo.username || !userInfo.password){
    //     return res.send({ status: 1, message: '用户名或密码不能为空！' })
    // }

    //判断名字有没有被占用(查询语句返回的是一个数组)
    const sql = 'select * from ev_users where username=?'
    console.log(db)
    db.query(sql,[userInfo.username],(err,results)=>{
        if(err){
            return res.send({status:1,message:err.message})
        }
        if(results.length > 0){
            return res.send({status:1,message:'用户名被占用，请换其他用户名'})
        }
        // 进行密码加密
        userInfo.password = bcryptjs.hashSync(userInfo.password,10)
        // 定义插入新用户的sql语句
        const sqlIn = 'insert into ev_users set ?'
        db.query(sqlIn,{username:userInfo.username,password:userInfo.password},(err,results)=>{
            if(err){
                return res.send({status:1,message:err.message})
            }
            if(results.affectedRows != 1){
                return res.send({status:1,message:'注册失败'})
            }
            return res.send({status:0,message:'注册成功'})
        })
    })
})

// 登录
router.post('/login',expressJoi(reg_login_schema),(req,res)=>{
    const userinfo = req.body
    // 判断用户名存在吗？
    const sql = 'select * from ev_users where username=?'
    db.query(sql,userinfo.username,(err,results)=>{
        if(err) return res.send({status:1,message:err.message})
        if(results.length !== 1){
            return res.send({status:1,message:'登录失败，用户名不存在'})
        }
        // 判断密码
        const compareResult = bcryptjs.compareSync(userinfo.password,results[0].password)
        // 如果对比结果等于false（密码错误）
        if(!compareResult){
            return res.send({status:1,message:'密码错误'})
        }

        // 登录成功（生成token）
        // todo1:剔除危险数据（保留id,username,nickname，email）
        const user = {...results[0],password:'',user_pic:''}

        // 生成token字符串
        const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn:'10h'})

        res.send({
            status:0,
            message:'登录成功',
            token:'Bearer ' + tokenStr
        })

    })
    
    
})



module.exports = router